package com.company.loganalyzer.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 工具执行结果DTO
 * 
 * 统一的工具执行结果封装
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ToolResult {

    /**
     * 执行状态
     */
    private String status;

    /**
     * 工具名称
     */
    private String toolName;

    /**
     * 执行消息
     */
    private String message;

    /**
     * 结果数据
     */
    private Object data;

    /**
     * 元数据信息
     */
    private Map<String, Object> metadata;

    /**
     * 执行时间戳
     */
    private LocalDateTime timestamp;

    /**
     * 执行耗时（毫秒）
     */
    private Long executionTime;

    /**
     * 错误信息
     */
    private String error;

    /**
     * 创建成功结果
     */
    public static ToolResult success(String toolName, Object data) {
        return ToolResult.builder()
                .status("success")
                .toolName(toolName)
                .data(data)
                .timestamp(LocalDateTime.now())
                .build();
    }

    /**
     * 创建成功结果（带消息）
     */
    public static ToolResult success(String toolName, Object data, String message) {
        return ToolResult.builder()
                .status("success")
                .toolName(toolName)
                .data(data)
                .message(message)
                .timestamp(LocalDateTime.now())
                .build();
    }

    /**
     * 创建失败结果
     */
    public static ToolResult error(String toolName, String error) {
        return ToolResult.builder()
                .status("error")
                .toolName(toolName)
                .error(error)
                .timestamp(LocalDateTime.now())
                .build();
    }

    /**
     * 创建失败结果（带异常）
     */
    public static ToolResult error(String toolName, String message, Exception e) {
        return ToolResult.builder()
                .status("error")
                .toolName(toolName)
                .message(message)
                .error(e.getMessage())
                .timestamp(LocalDateTime.now())
                .build();
    }
}